﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Libreria.SIG.Modelo;

namespace Libreria.SIG.Negocio
{
    public class IngredientesDeRecetaNegocio
    {
        public List<IngredientesDeReceta> consultarIngredientesDeReceta(Int32 Receta, String cadenaDeConexion)
        {
            IngredientesDeReceta ingredientes = new IngredientesDeReceta(cadenaDeConexion);
            List<IngredientesDeReceta> ingredientesADevolver = new List<IngredientesDeReceta>();
            if (Receta > 0)
            {
                ingredientesADevolver = ingredientes.consultarIngredientes(Receta);
            }
            return ingredientesADevolver;
        }

        public void consultarIngredientesNecesarios(Int32 Receta, Int32 Porciones, List<IngredientesParaReceta> _ing, String cadenaDeConexion)
        {
            if (Receta > 0)
            {
                Receta _rec = (new RecetaNegocio()).consultarReceta(Receta, cadenaDeConexion);
                IngredientesDeReceta ingredientes = new IngredientesDeReceta(cadenaDeConexion);
                IEnumerable<IngredientesDeReceta> ingredientesADevolver = ingredientes.consultarIngredientes(Receta);

                Double factorProporacional = Porciones / _rec.Porciones.Value;

                foreach (IngredientesDeReceta item in ingredientesADevolver)
                {
                    if (item.TipoDeAsociacion.ToUpper().Equals("I"))
                    {
                        Ingrediente ing = (new IngredienteNegocio()).consultarIngrediente(item.CodigoAsociado.Value, cadenaDeConexion);
                        IngredientesParaReceta ingrediente = _ing.Where(i => i.nombreIngrediente == ing.Nombre).SingleOrDefault();

                        if (ingrediente == null)
                        {
                            ingrediente = new IngredientesParaReceta();
                            ingrediente.nombreIngrediente = ing.Nombre;
                            ingrediente.cantidad = item.Cantidad.Value * factorProporacional;
                            ingrediente.unidad = ing.UnidadDeMedida;
                            _ing.Add(ingrediente);
                        }
                        else
                        {
                            ingrediente.cantidad = ingrediente.cantidad + (item.Cantidad.Value * factorProporacional);
                        }
                    }
                    else
                    {
                        consultarIngredientesNecesarios(item.CodigoAsociado.Value, Porciones, _ing, cadenaDeConexion);
                    }
                }

            }

        }

        public void eliminarIngredienteDeReceta(Int32 Codigo, String cadenaDeConexion)
        {
            IngredientesDeReceta ingredienteAEliminar = new IngredientesDeReceta(cadenaDeConexion);
            ingredienteAEliminar.Codigo = Codigo;
            ingredienteAEliminar.eliminar();
        }

        public void actualizarIngredienteDeReceta(Int32 Codigo, Int32 CodigoReceta, String TipoDeAsociacion, Int32 CodigoAsociado, Int32 Cantidad, String cadenaDeConexion)
        {
            IngredientesDeReceta ingredienteAActualizar = new IngredientesDeReceta(cadenaDeConexion);
            ingredienteAActualizar.Codigo = Codigo;
            ingredienteAActualizar.CodigoReceta = CodigoReceta;
            ingredienteAActualizar.TipoDeAsociacion = TipoDeAsociacion;
            ingredienteAActualizar.CodigoAsociado = CodigoAsociado;
            ingredienteAActualizar.Cantidad = Cantidad;
            ingredienteAActualizar.actualizar();
        }

        public void crearIngredienteDeReceta(Int32 CodigoReceta, String TipoDeAsociacion, Int32 CodigoAsociado, Int32 Cantidad, String cadenaDeConexion)
        {
            IngredientesDeReceta ingredienteACrear = new IngredientesDeReceta(cadenaDeConexion);
            ingredienteACrear.CodigoReceta = CodigoReceta;
            ingredienteACrear.TipoDeAsociacion = TipoDeAsociacion;
            ingredienteACrear.CodigoAsociado = CodigoAsociado;
            ingredienteACrear.Cantidad = Cantidad;
            ingredienteACrear.crear();
        }
    }

}
